package com.ionicframework.starter;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;

import com.baidu.android.pushservice.PushMessageReceiver;
import com.cmpsoft.mobile.plugin.pushnotification.PushNotification;

/*
 * Push消息处理receiver。请编写您需要的回调函数�?�?��来说�?onBind是必须的，用来处理startWork返回值；
 *onMessage用来接收透传消息�?onSetTags、onDelTags、onListTags是tag相关操作的回调；
 *onNotificationClicked在�?知被点击时回调； onUnbind是stopWork接口的返回�?回调

 * 返回值中的errorCode，解释如下：
 *0 - Success
 *10001 - Network Problem
 *10101  Integrate Check Error
 *30600 - Internal Server Error
 *30601 - Method Not Allowed
 *30602 - Request Params Not Valid
 *30603 - Authentication Failed
 *30604 - Quota Use Up Payment Required
 *30605 -Data Required Not Found
 *30606 - Request Time Expires Timeout
 *30607 - Channel Token Timeout
 *30608 - Bind Relation Not Found
 *30609 - Bind Number Too Many

 * 当您遇到以上返回错误时，如果解释不了您的问题，请用同�?��求的返回值requestId和errorCode联系我们追查问题�? *
 */

public class MyPushMessageReceiver extends PushMessageReceiver {
    /** TAG to Log */
    public static final String TAG = MyPushMessageReceiver.class
            .getSimpleName();

    /**
     * 调用PushManager.startWork后，sdk将对push
     * server发起绑定请求，这个过程是异步的�?绑定请求的结果�?过onBind返回�?如果您需要用单播推�?，需要把这里获取的channel
     * id和user id上传到应用server中，再调用server接口用channel id和user id给单个手机或者用户推送�?
     *
     * @param context
     *            BroadcastReceiver的执行Context
     * @param errorCode
     *            绑定接口返回值，0 - 成功
     * @param appid
     *            应用id。errorCode�?时为null
     * @param userId
     *            应用user id。errorCode�?时为null
     * @param channelId
     *            应用channel id。errorCode�?时为null
     * @param requestId
     *            向服务端发起的请求id。在追查问题时有用；
     * @return none
     */
    @Override
    public void onBind(Context context, int errorCode, String appid,
            String userId, String channelId, String requestId) {
        String responseString = "onBind errorCode=" + errorCode + " appid="
                + appid + " userId=" + userId + " channelId=" + channelId
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

        if (errorCode == 0) {
            // 绑定成功
        }
//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, responseString);
    }

    /**
     * 接收透传消息的函数�?
     *
     * @param context
     *            上下�?     * @param message
     *            推�?的消�?     * @param customContentString
     *            自定义内�?为空或�?json字符�?     */
    @Override
    public void onMessage(Context context, String message,
            String customContentString) {
        String messageString = "透传消息 message=\"" + message
                + "\" customContentString=" + customContentString;
        Log.d(TAG, messageString);
        String myvalue = null;
        // 自定义内容获取方式，mykey和myvalue对应透传消息推�?时自定义内容中设置的键和�?        
        if (!TextUtils.isEmpty(customContentString)) {
            JSONObject customJson = null;
            try {
                customJson = new JSONObject(customContentString);
                
                if (!customJson.isNull("html")) {
                    myvalue = customJson.getString("html");
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, messageString);
          handlingNotificationOpen(context, "", message, myvalue);
    }

    /**
     * 接收通知点击的函数�?
     *
     * @param context
     *            上下�?     * @param title
     *            推�?的�?知的标题
     * @param description
     *            推�?的�?知的描述
     * @param customContentString
     *            自定义内容，为空或�?json字符�?     */
    @Override
    public void onNotificationClicked(Context context, String title,
            String description, String customContentString) {
        String notifyString = "通知点击 title=\"" + title + "\" description=\""
                + description + "\" customContent=" + customContentString;
        Log.d(TAG, notifyString);
        String myvalue = null;
        // 自定义内容获取方式，mykey和myvalue对应通知推�?时自定义内容中设置的键和�?        
        if (!TextUtils.isEmpty(customContentString)) {
            JSONObject customJson = null;
            try {
                customJson = new JSONObject(customContentString);

                if (!customJson.isNull("html")) {
                    myvalue = customJson.getString("html");
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, notifyString);
//        updateContent2(context, title, description);
          handlingNotificationOpen(context, title, description,myvalue);
    }

    

	/**
     * 接收通知到达的函数�?
     *
     * @param context
     *            上下�?     * @param title
     *            推�?的�?知的标题
     * @param description
     *            推�?的�?知的描述
     * @param customContentString
     *            自定义内容，为空或�?json字符�?     */

    @Override
    public void onNotificationArrived(Context context, String title,
            String description, String customContentString) {

        String notifyString = "onNotificationArrived  title=\"" + title
                + "\" description=\"" + description + "\" customContent="
                + customContentString;
        Log.d(TAG, notifyString);

        // 自定义内容获取方式，mykey和myvalue对应通知推�?时自定义内容中设置的键和�?        
        if (!TextUtils.isEmpty(customContentString)) {
            JSONObject customJson = null;
            try {
                customJson = new JSONObject(customContentString);
                String myvalue = null;
                if (!customJson.isNull("mykey")) {
                    myvalue = customJson.getString("mykey");
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        // 你可以參�?onNotificationClicked中的提示从自定义内容获取具体�?        
//        updateContent(context, notifyString);
    }

    /**
     * setTags() 的回调函数�?
     *
     * @param context
     *            上下�?     * @param errorCode
     *            错误码�?0表示某些tag已经设置成功；非0表示�?��tag的设置均失败�?     * @param successTags
     *            设置成功的tag
     * @param failTags
     *            设置失败的tag
     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onSetTags(Context context, int errorCode,
            List<String> sucessTags, List<String> failTags, String requestId) {
        String responseString = "onSetTags errorCode=" + errorCode
                + " sucessTags=" + sucessTags + " failTags=" + failTags
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, responseString);
    }

    /**
     * delTags() 的回调函数�?
     *
     * @param context
     *            上下�?     * @param errorCode
     *            错误码�?0表示某些tag已经删除成功；非0表示�?��tag均删除失败�?
     * @param successTags
     *            成功删除的tag
     * @param failTags
     *            删除失败的tag
     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onDelTags(Context context, int errorCode,
            List<String> sucessTags, List<String> failTags, String requestId) {
        String responseString = "onDelTags errorCode=" + errorCode
                + " sucessTags=" + sucessTags + " failTags=" + failTags
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, responseString);
    }

    /**
     * listTags() 的回调函数�?
     *
     * @param context
     *            上下�?     * @param errorCode
     *            错误码�?0表示列举tag成功；非0表示失败�?     * @param tags
     *            当前应用设置的所有tag�?     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onListTags(Context context, int errorCode, List<String> tags,
            String requestId) {
        String responseString = "onListTags errorCode=" + errorCode + " tags="
                + tags;
        Log.d(TAG, responseString);

//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, responseString);
    }

    /**
     * PushManager.stopWork() 的回调函数�?
     *
     * @param context
     *            上下�?     * @param errorCode
     *            错误码�?0表示从云推�?解绑定成功；�?表示失败�?     * @param requestId
     *            分配给对云推送的请求的id
     */
    @Override
    public void onUnbind(Context context, int errorCode, String requestId) {
        String responseString = "onUnbind errorCode=" + errorCode
                + " requestId = " + requestId;
        Log.d(TAG, responseString);

        if (errorCode == 0) {
            // 解绑定成�?        
        	}
//        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, responseString);
    }

//    private void updateContent(Context context, String content) {
//        Log.d(TAG, "updateContent");
//        String logText = "" + Utils.logStringCache;
//
//        if (!logText.equals("")) {
//            logText += "\n";
//        }
//
//        SimpleDateFormat sDateFormat = new SimpleDateFormat("HH-mm-ss");
//        logText += sDateFormat.format(new Date()) + ": ";
//        logText += content;
//
//        Utils.logStringCache = logText;
//
//        Intent intent = new Intent();
//        intent.setClass(context.getApplicationContext(), TestActivity.class);
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        context.getApplicationContext().startActivity(intent);
//          
//    }
    

    
    
    /**
     * 
     *
     * @param context
     *            上下文         
     * @param title
     *            通知标题
     * @param description
     *            通知描述
     * @param myvalue
     *            自定义值         
     */
    private void handlingNotificationOpen(Context context, String title,
			String description,String myvalue) {
		// TODO Auto-generated method stub
    	
		 
		 Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
		 launch.addCategory(Intent.CATEGORY_LAUNCHER);
		 launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
		 
//		 JPushPlugin.notificationAlert = alert;
//		 JPushPlugin.notificationExtras = extras;
		 //传递通知数据给java插件
		 PushNotification.transmitOpen(title,
					description,myvalue);

		 context.startActivity(launch);
	}

}
